Модуль:Инфобокс персонажа
local infoboxCharacter = {} --верхний уровень - группа инфобоксов function infoboxCharacter.blockCreate(frame) local args = frame.args --функции --разбиение строки на массив подстрок по определенному символу function split(str, separator, reg) local result = {} --Проверка на образец if (not reg) then regExp = true else regExp = false end --переменные позиций local n local k --управляющие переменные local s = 0 local i = 1 --обработка строки while k ~= str:len() do --поиск сепаратора local substring n, k = string.find(str, separator, s + 1, regExp) --если поиск не дал результатов if (k nil or n nil) then resulti = string.sub(str, s + 1, str:len()) break end --если сепаратор найден substring = string.sub(str, s + 1, n - 1) --добавление результата if substring ~= "" then resulti = substring i = i + 1 end s = k end return result end --создание инфобокса function infoboxCreate() --обёртка содержимого local infobox = mw.html.create('div') infobox:addClass('infoboxCharacter') --функции ---------------------------------------------------------- --создание изображений и кнопок (устаревшее) function imageCreateOld(name, dNone) local image = mw.html.create('div') image:addClass('infBlock') if args'подпись' '' then image:css('margin', '6px 0 0 0') end if dNone then image:css('display', 'none') end image:wikitext('[[Файл:'..argsname..'|250px|link=]]') return image end function buttonCreateOld(name) local button = mw.html.create('div') button:addClass('infButton') button:css('color', argsтекста заголовка') button:css('background', argsфона заголовка') button:wikitext(argsname) return button end ------------------------------------------------------------- --создание плашек с информацией о поле и возрасте function kindGenderCreate(text, image) local label = mw.html.create('div') if image then local imgBlock = mw.html.create('div') imgBlock:wikitext('link=') label:css('padding-left', '23px') label:node(imgBlock) else label:css('padding-left', '3px') end label:wikitext(text) return label end --создание строки таблицы function lineCreate(title, text) local line = mw.html.create('tr') local leftColumn = mw.html.create('th') leftColumn:wikitext(title) line:node(leftColumn) local rightColumn = mw.html.create('td') rightColumn:wikitext(text) line:node(rightColumn) return line end --создание пустой сворачивающейся таблицы с заголовком function collapsibleTableCreate(label) local colTable = mw.html.create('table') colTable:addClass('mw-collapsible mw-collapsed') local headerLine = mw.html.create('tr') local header = mw.html.create('th') header:css('background-color', argsфона заголовка') header:css('color', argsтекста заголовка') header:wikitext(label) header:attr('colspan', '6') headerLine:node(header) colTable:node(headerLine) return colTable end --Создание колорбокса function colorBoxCreate(colors, borderColor) local colorBox = mw.html.create('div') colorBox:addClass('infoboxCharacter_colorBox') if (borderColor) then colorBox:css('border', '2px solid '..borderColor) else colorBox:css('border', '1px solid gray') end local parsedColors = split(colors, '/') width = 100 / #parsedColors for i = 1, #parsedColors do local innerElement = mw.html.create('div') innerElement:css('background-color', parsedColorsi) innerElement:css('width', width..'%') innerElement:attr('title', parsedColorsi) colorBox:node(innerElement) end return colorBox end --содержимое --заголовок --блок local header = mw.html.create('div') header:addClass('infoboxCharacter_header') header:css('background-color', argsфона заголовка') --текст local headerText = mw.html.create("div") headerText:wikitext(args'имя') headerText:css('color', argsтекста заголовка') header:node(headerText) --титул local title if args'подпись' ~= '' then title = mw.html.create('div') title:addClass('infoboxCharacter_title') title:wikitext(args'подпись') end ------------------------------ --изображения и кнопки (устаревшие) local imgOld if args'изображение' ~= '' then imgOld1 = imageCreateOld('изображение') end if args'изображение2' ~= '' then imgOld2 = imageCreateOld('изображение2', true) end if args'изображение3' ~= '' then imgOld3 = imageCreateOld('изображение3', true) end if args'изображение4' ~= '' then imgOld4 = imageCreateOld('изображение4', true) end local butOld if args'изображение2' ~= '' or args'изображение3' ~= '' or args'изображение4' ~= '' then butOld = mw.html.create('div') butOld:cssText('width:100%; margin:6px 0 6px; text-align:center') butOld:node(buttonCreateOld('подпись1')) if args'изображение2' ~= '' then butOld:node(buttonCreateOld('подпись2')) end if args'изображение3' ~= '' then butOld:node(buttonCreateOld('подпись3')) end if args'изображение4' ~= '' then butOld:node(buttonCreateOld('подпись4')) end end --------------------------- --вид и пол local kindGender if args'вид' ~= '' or args'пол' ~= '' then kindGender = mw.html.create('div') kindGender:addClass('infoboxCharacter_kindGender colorlink') --вид if args'вид' ~= '' then local kind = mw.html.create('div') local textKind local kindImg if mw.ustring.lower(args'вид') 'единорог' then textKind = 'Единорог' kindImg = 'Unicorn picto' elseif mw.ustring.lower(args'вид') 'пегас' then textKind = 'Пегас' kindImg = 'Pegasus picto' elseif mw.ustring.lower(args'вид') 'земнопони' or mw.ustring.lower(args'вид') 'земной пони' or mw.ustring.lower(args'вид') 'земная пони' then if mw.ustring.lower(mw.ustring.lower(args'пол')) 'жен' or mw.ustring.lower(mw.ustring.lower(args'пол')) 'женский' then textKind = 'Земная пони' else textKind = 'Земной пони' end kindImg = 'Earthpony picto' elseif mw.ustring.lower(args'вид') 'аликорн' then textKind = 'Аликорн' kindImg = 'Alicorn picto' else textKind = args'вид' end local kind = kindGenderCreate(textKind, kindImg) kindGender:node(kind) end --пол local checkGender = mw.ustring.lower(args'пол') if checkGender 'муж' or checkGender 'мужской' or checkGender 'жен' or checkGender 'женский' then local gender = mw.html.create("div") local genderText local kindImg if checkGender 'муж' or checkGender 'мужской' then genderText = 'Жеребец' genderImg = 'Male picto' else genderText = 'Кобыла' genderImg = 'Female picto' end local gender = kindGenderCreate(genderText, genderImg) kindGender:node(gender) end end --занятие, место проживания, владелец, ареал обитания local infoTable if args'занятие' ~= '' or argsпроживания' ~= '' or args'владелец' ~= '' or argsобитания' ~= '' then infoTable = mw.html.create('table') infoTable:addClass('infoboxCharacter_infoTable') if args'занятие' ~= '' then local line = lineCreate('занятие', args'занятие') infoTable:node(line) end if argsпроживания' ~= '' then local line = lineCreate('место проживания', argsпроживания') infoTable:node(line) end if args'владелец' ~= '' then local line = lineCreate('владелец', args'владелец') infoTable:node(line) end if argsобитания' ~= '' then local line = lineCreate('ареал обитания', argsобитания') infoTable:node(line) end end --озвучка local voiceTable if argsозвучка' ~= '' or argsозвучка' ~= '' or argsозвучка песен' ~= '' or argsозвучка песен' ~= '' then voiceTable = collapsibleTableCreate('Озвучка') voiceTable:addClass('infoboxCharacter_collapsibleInfoTable') if argsозвучка' ~= '' then local line = lineCreate('Русская', argsозвучка') voiceTable:node(line) end if argsозвучка' ~= '' then local line = lineCreate('Оригинальная', argsозвучка') voiceTable:node(line) end if argsозвучка песен' ~= '' then local line = lineCreate('Русская песен', argsозвучка песен') voiceTable:node(line) end if argsозвучка песен' ~= '' then local line = lineCreate('Оригинальная песен', argsозвучка песен') voiceTable:node(line) end end --родственники local relativesTable if argsназвание' ~= '' then relativesTable = collapsibleTableCreate('Родственники') relativesTable:addClass('infoboxCharacter_collapsibleInfoTable') local rtc = 1 while argsназвание' and argsназвание' ~= '' do local line = lineCreate(argsназвание', args'родственник'..rtc) relativesTable:node(line) rtc = rtc + 1 end end --цвета local colorTable = {} local appearanceTable local ctc = 1 ----while args'..ctc do local color = split(args'..ctc, ':') --if color2 then -- colorTable+ 1 = color --end --ctc = ctc + 1 --end if colorTable1 then appearanceTable = collapsibleTableCreate('Внешний вид') appearanceTable:addClass('infoboxCharacter_collapsibleAppearanceTable') local length = #rawColors local colspan local tr for i = 1, length do if length - i 1 and length % 3 2 then colspan = '3' elseif length - i 0 and length % 3 1 then colspan = '6' else colspan = '2' end if i % 3 1 then tr = mw.html.create('tr') end local th = mw.html.create('th') th:attr('colspan', colspan) th:wikitext(colorTablei1..' ') local colorBox = colorBoxCreate(colorTablei2) th:node(colorBox) tr:node(th) if (i % 3 0 or length - i 0) then appearanceTable:node(tr) end end end --построение infobox:node(header) if title then infobox:node(title) end ---------------------------------- --изображения и кнопки (устаревшие) if imgOld1 then infobox:node(imgOld1) end if imgOld2 then infobox:node(imgOld2) end if imgOld3 then infobox:node(imgOld3) end if imgOld4 then infobox:node(imgOld4) end if butOld then infobox:node(butOld) end ------------------------------- if kindGender then infobox:node(kindGender) end if infoTable then infobox:node(infoTable) end if voiceTable then infobox:node(voiceTable) end if relativesTable then infobox:node(relativesTable) end if appearanceTable then infobox:node(appearanceTable) end return infobox end --обёртка блока инфобоксов local infoboxGroup = mw.html.create('div') --infoboxGroup:attr('id', 'infoboxCharacterGroup') --создание инфобоксов local infobox1 = infoboxCreate() infoboxGroup:node(infobox1) return infoboxGroup end return infoboxCharacter